package me.mingshan.leetcode;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * https://leetcode.cn/problems/first-unique-character-in-a-string
 * <p>
 * 给定一个字符串 s ，找到 它的第一个不重复的字符，并返回它的索引 。如果不存在，则返回 -1 。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入: s = "leetcode"
 * 输出: 0
 * 示例 2:
 * <p>
 * 输入: s = "loveleetcode"
 * 输出: 2
 * 示例 3:
 * <p>
 * 输入: s = "aabb"
 * 输出: -1
 *
 * @author hanjuntao
 * @date 2025/7/2 0002
 */
public class L_387_first_unique_character_in_a_string {


    public static void main(String[] args) {
        System.out.println(firstUniqChar("leetcode"));
        System.out.println(firstUniqChar("loveleetcode"));
        System.out.println(firstUniqChar("aabb"));
    }

    public static int firstUniqChar(String s) {
        // 记录出现的字符串，如果出现过，将其删除
        Map<Character, String> map = new LinkedHashMap<>();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (map.containsKey(c)) {
                String s1 = map.get(c);
                String[] split = s1.split(";");
                split[1] = String.valueOf(Integer.parseInt(split[1]) + 1);

                map.put(c, split[0] + ";" + split[1]);
            } else {
                map.put(c, i + ";" + 1);
            }
        }

        if (map.isEmpty()) {
            return -1;
        } else {
            for (Map.Entry<Character, String> entry : map.entrySet()) {
                String value = entry.getValue();
                String[] split = value.split(";");
                if (Integer.parseInt(split[1]) == 1) {
                    return Integer.parseInt(split[0]);
                }
            }
        }

        return -1;
    }
}
